package ar.uade.distribuidas.tpo.dba.dao;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Set;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import ar.uade.distribuidas.tpo.base.utils.FormatUtils;
import ar.uade.distribuidas.tpo.dba.dominio.EstadoRemito;
import ar.uade.distribuidas.tpo.dba.dominio.ItemRemitoCPE;
import ar.uade.distribuidas.tpo.dba.dominio.OrdenDeCompra;
import ar.uade.distribuidas.tpo.dba.dominio.Proveedor;
import ar.uade.distribuidas.tpo.dba.dominio.RemitoCPE;
import ar.uade.distribuidas.tpo.dba.dominio.Rodamiento;
import ar.uade.distribuidas.tpo.dba.servicio.GestionOC;
import ar.uade.distribuidas.tpo.dba.servicio.GestionProveedor;
import ar.uade.distribuidas.tpo.dba.servicio.GestionRodamiento;

public class RemitoCPEXmlDAO {
	private static RemitoCPEXmlDAO instancia;
	private static String ARCHIVO = "remitocpe.xml";
	private Document doc;
	
	
	public static RemitoCPEXmlDAO getInstancia() {
		if(instancia == null){
			instancia = new RemitoCPEXmlDAO();
		}
		return instancia;
	}


	public RemitoCPEXmlDAO() {
		super();
		
	}
	
	


	
	public Set<RemitoCPE> recuperarRemitoCPE(){
		Set<RemitoCPE> rcpe = new HashSet<RemitoCPE>();
		NodeList nodos = doc.getElementsByTagName("RemitoCPE");
		for(int i = 0; i < nodos.getLength(); i++){
			if(nodos.item(i).hasChildNodes()){
				rcpe.add(mapStock((Element)nodos.item(i)));
			}
		}
		return rcpe;
	}
	
	private RemitoCPE mapStock(Element eleRemitoCpe){
		
		RemitoCPE rcpe = new RemitoCPE();

		try{
			rcpe.setEstado(EstadoRemito.NUEVO);
			DateFormat df = new SimpleDateFormat(FormatUtils.DATE_PATTERN);
			rcpe.setFecha(df.parse(eleRemitoCpe.getAttribute("Emision")));
			Element p = (Element) new Proveedor();
			((Proveedor) p).setCuil((Long.parseLong(eleRemitoCpe.getAttribute("cuil"))));
			((Proveedor) p).setNombre(eleRemitoCpe.getAttribute("RazonSocial"));

			rcpe.setProveedor(new GestionProveedor().getProveedor(Long.parseLong(getValue("Cuil", p))));

			
			
			Element referencia = (Element)doc.getElementsByTagName("Referencia").item(0);
			
			NodeList ordencompras = referencia.getElementsByTagName("OrdenCompra");

			Node ocompra = ordencompras.item(0);
			
			if (ocompra.getNodeType() == Node.ELEMENT_NODE) {
			Element c = (Element) ocompra;
			
			OrdenDeCompra t = new GestionOC().getOC(Integer.valueOf(getValue("Numero", c)));
				
		

			
			Element rodamiento = (Element)doc.getElementsByTagName("Rodamientos").item(0);
			NodeList items = rodamiento.getElementsByTagName("Item");

			for (int j = 0; j < items.getLength(); j++) {
				Node item = items.item(j);

				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element it = (Element) item;
					Rodamiento r = new GestionRodamiento().getRodamiento(it.getAttribute("serie"), getValue("Sufijo", it), getValue("Marca", it), getValue("Origen", it));
					if (r!=null) {
						ItemRemitoCPE icpe = new ItemRemitoCPE();
						icpe.setCantidad((Integer.valueOf(getValue("Cantidad", it))));
						icpe.setRodamiento(r);
						icpe.setOc(t);
												
					}

				}

			}

		}
		}catch (Exception e){
			e.printStackTrace();
		}
		return rcpe;
	}

	
	private static String getValue(String tag, Element element) {
		NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
		Node node = (Node) nodes.item(0);
		if (node!=null) {
			return node.getNodeValue();
		}
		return "";
	}
}